package graph;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.ImageIcon;
import java.awt.Image;
import java.awt.Toolkit;

public class Graph {
    // 存放每个结点内的数据
    private String[] vertex;
    // 存放图对应的邻接矩阵
    private int[][] edges;

    public Graph(int n) {
        edges = new int[n][n];
        vertex = new String[n];
    }

    public void insertEdges(int v1, int v2, int weight) {
        edges[v1][v2] = weight;
        edges[v2][v1] = weight; // 无向图，所以两边都要赋值
    }

    // 显示图对应的矩阵
    public void showGraph() {

        for (int i = 0; i < edges.length; i++) {
            for (int i1 = 0; i1 < edges[i].length; i1++) {
                System.out.print(edges[i][i1] + "\t");
            }
            System.out.println();
        }
    }

    public static class picture extends JFrame {
        ImageIcon icon = new ImageIcon();
        Image image = Toolkit.getDefaultToolkit().getImage(
                "E:/bigwork/grapf.png");

        picture() {//constructor
            this.setSize(400, 400);
            icon.setImage(image);
            JButton button = new JButton();
            button.setIcon(icon);

            this.getContentPane().add(button);
            this.setVisible(true);

        }

        public static void main(String[] args) {
            int n = 11; // 根据地图上的城市数量设置顶点数量
            Graph graph = new Graph(n);

            // 城市名称
            String[] vertexValue = {
                    "石家庄", "济南", "上海", "南京", "杭州",
                    "福州", "南昌", "长沙", "武汉", "合肥", "郑州"
            };

            // 复制顶点名称到图中
            for (int i = 0; i < n; i++) {
                graph.vertex[i] = vertexValue[i];
            }

            // 构建边的关系及权重
            graph.insertEdges(0, 1, 417); // 石家庄 -> 济南
            graph.insertEdges(0, 8, 389); // 石家庄 -> 武汉
            graph.insertEdges(1, 6, 550); // 济南 -> 合肥
            graph.insertEdges(1, 7, 618); // 济南 -> 南京
            graph.insertEdges(2, 7, 306); // 上海 -> 南京
            graph.insertEdges(2, 9, 190); // 上海 -> 杭州
            graph.insertEdges(3, 7, 563); // 南京 -> 南昌
            graph.insertEdges(3, 8, 344); // 南京 -> 武汉
            graph.insertEdges(4, 9, 544); // 杭州 -> 福州
            graph.insertEdges(5, 10, 848); // 福州 -> 长沙
            graph.insertEdges(6, 7, 554); // 合肥 -> 南京
            graph.insertEdges(6, 8, 389); // 合肥 -> 武汉
            graph.insertEdges(7, 8, 344); // 南京 -> 武汉
            graph.insertEdges(7, 9, 544); // 南京 -> 杭州
            graph.insertEdges(8, 10, 349); // 武汉 -> 长沙
            graph.insertEdges(9, 10, 922); // 杭州 -> 长沙

            // 显示图
            graph.showGraph();

            new picture();
        }
    }
}


